<script>
    // 是不是对象
    function isObject(obj) {
        return typeof obj === "object" && obj !== null;
    }
    // 深度比较
    function isEqual(obj1, obj2) {
        if (!isObject(obj1) || !isObject(obj2)) {
            // 说明其中有一个数据是基本数据类型
            return obj1 === obj2
        }
        // 两个都是对象或数组，比较key的个数是否相同
        let obj1Keys = Object.keys(obj1)
        let obj2Keys = Object.keys(obj2)
        if (obj1Keys.length !== obj2Keys.length) {
            return false;
        }

        // 两个对象或数组中的key的个数是一样的
        // 以其中一个为基准，遍历，递归比较
        for (let key in obj1) {
            // console.log(obj1[key]);
            let res = isEqual(obj1[key], obj2[key])
            if (!res) {
                return false;
            }
        }

        // 全相等
        return true;
    }

    let obj1 = {
        a: 1,
        b: 2,
        c: {
            d: "d",
            e: 'e'
        }
    }
    let obj2 = {
        a: 1,
        b: 2,
        c: {
            d: "d",
            e: 'e'
        }
    }

    console.log(isEqual(obj1, obj2)); // true
</script>